package net.esj.basic.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import org.apache.struts2.util.StrutsTypeConverter;

/**
*
* 日期转换对象，使用该转换器，在BaseForm当中做一下注册，系统自动地帮助字符的日期表示转换为java.util.Date对象.
* @author xuyy.
* Create Time：2006-9-11 19:11:47.
*/
public class DateConverter extends StrutsTypeConverter {
    /**
     * 日期格式化对象.
     */
    private static SimpleDateFormat df = new SimpleDateFormat();
    
    /**
     * 模式集合.
     */
    private static Set<String> patterns = new HashSet<String>();
    //注册一下日期的转换格式
    static{
        DateConverter.patterns.add("yyyy-MM-dd");
        DateConverter.patterns.add("yyyy-MM-dd HH:mm");
        DateConverter.patterns.add("yyyy-MM-dd HH:mm:ss");
        DateConverter.patterns.add("yyyy/MM/dd HH:mm:ss");
        DateConverter.patterns.add("MM/dd/yyyy HH:mm:ss");
        DateConverter.patterns.add("MM/dd/yyyy");
    }

    @Override  
    public Object convertFromString(Map context, String[] values, Class toClass) { 
    	String dateString = null;
    	Date   date       = null;  
    	
    	if(null == values) return null;
    	if(values.length > 0) dateString = values[0];
    	
        Iterator it = patterns.iterator();
        while(it.hasNext()){
            try{
                String pattern = (String)it.next();
                df.applyPattern(pattern);
                date = df.parse((String)dateString);
                break;
            }catch(ParseException ex){
                //do iterator continue
            }
        }
    	
        return date;
    }  
  
    @Override  
    public String convertToString(Map context, Object o) {  
    	// 格式化为date格式的字符串  
    	if (o instanceof Date) {  
    		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
    		return sdf.format((Date) o);  
    	}  
    	return ""; 
    }  

}